#-*- coding: UTF-8 -*-
from pyramid.httpexceptions import HTTPFound
from pyramid.security import remember
from pyramid.security import forget




from scp.modelo.models import DBSession
from scp.modelo.Usuario import Usuario
from scp.modelo.Permiso import Permiso
from scp.modelo.Rol import Rol

from pyramid.response import Response
from pyramid.view import view_config
import json

from pyramid.security import authenticated_userid

import re

#@view_config(renderer='json')
def menus(request):
	"""Método controlador encargado de la creación dinámica del Panel de Menú de Navegación, de acuerdo a los roles del Usuario.
		URL asociada: /menus/{operacion}
		operacion:
			traerMenues, crea dinámicamente el panel de Navegación
		@param request: Petición Http del cliente. 	
	"""

	print ">>>>>>>>>>>>>Controlador de Menus - Inicio>>>>>>>>>>>>>>"
	print "request:"
	print request

	print '>request.metodo'
	
	methodRequest = request.method
	print methodRequest
	
	print '>request.url'
	
	print request.url
	
	
	dicParametros = request.matchdict
	
	
	print "parametros abajo..."
	print request.params
	
	print 'request.body'
	print request.body 
	

	print "operaciónnnnnnnn"
	print dicParametros.get('operacion')
	print "operaciónnnnnnnn"
	
	session = DBSession()

	print 'dicParametros.get(operacion).find(?):' 
	print dicParametros.get('operacion').find('?')
	
	if dicParametros.get('operacion') == 'traerMenus':
		
		
		#traemos el usuario logeado
		login = authenticated_userid(request)
		session = DBSession()
		usuario = session.query(Usuario).filter_by(username=login).first()
	
		#traemos sus roles
		rolesUsuario = usuario.roles
		
		mostrarMenuSistema = False
		mostrarMenuDesarrollo = False
		mostrarAdmUsuario = False
		mostrarAdmAtributos = False
		mostrarAdmRol = False
		mostrarAdmProyectos = False
		mostrarAdmTiposItems = False
		mostrarAdmFases = False
		
		
		for rol in rolesUsuario:
			permisos = rol.permisos
			for permiso in permisos:
				if permiso.tipo == 'S':
					mostrarMenuSistema = True
				if permiso.tipo == 'P' :
					mostrarMenuDesarrollo = True
				if permiso.nombre == 'CREACION_USUARIO' or permiso.nombre == 'ELIMINACION_USUARIO' or permiso.nombre == 'EDICION_USUARIO' or permiso.nombre == 'VER_USUARIO':
					mostrarAdmUsuario = True	
				if permiso.nombre == 'CREACION_ATRIBUTO' or permiso.nombre == 'ELIMINACION_ATRIBUTO' or permiso.nombre == 'EDICION_ATRIBUTO' or permiso.nombre == 'VER_ATRIBUTO':
					mostrarAdmAtributos = True
				if permiso.nombre == 'CREACION_ROL' or permiso.nombre == 'ELIMINACION_ROL' or permiso.nombre == 'EDICION_ROL' or permiso.nombre == 'VER_ROL':
					mostrarAdmRol = True
				if permiso.nombre == 'CREACION_PROYECTO' or permiso.nombre == 'ELIMINACION_PROYECTO' or permiso.nombre == 'EDICION_PROYECTO' or permiso.nombre == 'VER_PROYECTO':
					mostrarAdmProyectos = True
				if permiso.nombre == 'CREACION_TIPO_ITEM' or permiso.nombre == 'ELIMINACION_TIPO_ITEM' or permiso.nombre == 'EDICION_TIPO_ITEM' or permiso.nombre == 'VER_TIPO_ITEM':
					mostrarAdmTiposItems = True
				if permiso.nombre == 'CREACION_FASE' or permiso.nombre == 'ELIMINACION_FASE' or permiso.nombre == 'EDICION_FASE' or permiso.nombre == 'VER_FASE':
					mostrarAdmFases = True
				
		
		moduloSistema = {'text':'Administacion del Sistema','leaf':False, 'children':[]}
		moduloAdmUsuario = {'text':'Administacion de Usuarios','panel':'AdmUsers','leaf':True}
		moduloDesarrollo = {'text':'Modulo de Desarrollo','leaf':False, 'children':[]}
		moduloAdmAtributo = {'text':'Administacion de Atributos','panel':'AdmAtributos','leaf':True}
		moduloAdmRol = {'text':'Administacion de Roles','panel':'AdmRoles','leaf':True}
		moduloAdmProyecto = {'text':'Administacion de Proyectos','panel':'AdmProyectos','leaf':True}
		moduloAdmTipoItem = {'text':'Administacion de Tipos de Items','panel':'AdmTipos_Items','leaf':True}
		moduloAdmFase = {'text':'Administacion de Fases','panel':'AdmFases','leaf':True}
		
		modulosEnviar = []
		
		if( mostrarMenuSistema == True ):
			
			if mostrarAdmUsuario == True:
				moduloSistema.get('children').append(moduloAdmUsuario)
			
			modulosEnviar.append(moduloSistema)
		
		if mostrarMenuDesarrollo == True :
			
			if mostrarAdmAtributos == True:
				moduloDesarrollo.get('children').append(moduloAdmAtributo)	
			if mostrarAdmRol == True:
				moduloDesarrollo.get('children').append(moduloAdmRol)	
			if mostrarAdmProyectos == True:
				moduloDesarrollo.get('children').append(moduloAdmProyecto)	
			if mostrarAdmTiposItems == True:
				moduloDesarrollo.get('children').append(moduloAdmTipoItem)	
			if mostrarAdmFases == True:
				moduloDesarrollo.get('children').append(moduloAdmFase)	
			
			
				
			modulosEnviar.append(moduloDesarrollo)
		
		print modulosEnviar
		
		response = Response()	
		#response.body = json.dumps([{'text':'Administacion del Sistema','leaf':False, 'children':[{'text':'Administacion de Usuarios','panel':'AdmUsers','leaf':True}]}, {'nombre':'Módulo de Desarrollo', 'hoja':False, 'leaf':False}] )
		
		response.body = json.dumps( modulosEnviar )
		response.content_type = 'application/json'
		return response
	 
	
